🌅 接續上篇,需要持久化的資料以Volume處理,但是要一個個管理pod的volume甚是麻煩,試想若單純需要儲存空間,而不在意該空間如何提供,那能將其建造一個儲存池(storage pool),需要空間的pod就從池子要資源,就像是node向cluster索取資源般的關係
PV 為cluster內的儲存,生命週期獨立於使用它的pod,並且能夠儲存不同類型的資料
訪問模式
回收政策
建立PV
# 取自官網
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv0003
spec:
# 1. 容量
capacity:
storage: 5Gi
# 2. 預設為檔案系統,掛載於目錄,另個為block,以block device掛載
volumeMode: Filesystem
# 3. 訪問模式
accessModes:
- ReadWriteOnce
# 4. 回收政策
persistentVolumeReclaimPolicy: Recycle
# 5. 特定的種類`class`(下集待續), 未設定的話,只能分給沒指定種類的PVC
storageClassName: slow
# 6. 掛載選項: 需注意此項不做檢查,若有問題就會掛載失敗
mountOptions:
- hard
- nfsvers=4.1
nfs:
path: /tmp
server: 172.17.0.2
有了PV,接下來就可以依需求提取所需的資源,PVC由USER建立,PVC和PV做綁定根據,PVC和PV的設定類似,不過需要配對到PV,因此有selector
欄位作配對根據之一
# 取自官方文件
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: myclaim
spec:
accessModes:
- ReadWriteOnce
volumeMode: Filesystem
resources:
requests:
storage: 8Gi
storageClassName: slow
# 兩項條件皆需符合
selector:
matchLabels:
release: "stable"
matchExpressions:
- {key: environment, operator: In, values: [dev]}
PV && PVC 操作指令
# 取得pv
kubectl get pv
kubectl get persistenVolume
# 取得pvc
kubectl get pvc
kubectl get persistentvolumeclaim
kubectl describe pv <名稱>
# 刪除pvc
kubectl delete persistentvolumeclaim <名稱>
apiVersion: v1
kind: Pod
metadata:
name: itHome-pod
spec:
containers:
- name: myhome
image: nginx
volumeMounts:
- mountPath: "/var/www/html"
name: myVol
# 指定volume用pvc, 取用的pvc為myclaim
volumes:
- name: myVol
persistentVolumeClaim:
claimName: myclaim